/**
 * 权限认证相关功能模块
 */

// JWT Token 操作
const TokenService = {
    /**
     * 保存 Token 到本地存储
     * @param {string} token - JWT token
     * @param {object} userInfo - 用户信息
     */
    setToken(token, userInfo) {
        localStorage.setItem('token', token);
        localStorage.setItem('userInfo', JSON.stringify(userInfo));
    },

    /**
     * 获取 Token
     * @returns {string} JWT token
     */
    getToken() {
        return localStorage.getItem('token');
    },

    /**
     * 获取用户信息
     * @returns {object} 用户信息
     */
    getUserInfo() {
        const userInfo = localStorage.getItem('userInfo');
        return userInfo ? JSON.parse(userInfo) : null;
    },

    /**
     * 清除认证信息
     */
    clearToken() {
        localStorage.removeItem('token');
        localStorage.removeItem('userInfo');
    }
};

// 权限检查
const PermissionService = {
    /**
     * 检查用户是否有指定权限
     * @param {string} permission - 权限标识
     * @returns {boolean} 是否有权限
     */
    hasPermission(permission) {
        const userInfo = TokenService.getUserInfo();
        if (!userInfo || !userInfo.permissions) return false;
        return userInfo.permissions.includes(permission);
    },

    /**
     * 检查用户是否有指定角色
     * @param {string} role - 角色标识
     * @returns {boolean} 是否有角色
     */
    hasRole(role) {
        const userInfo = TokenService.getUserInfo();
        if (!userInfo || !userInfo.roles) return false;
        return userInfo.roles.includes(role);
    }
};

// 请求拦截器
const RequestInterceptor = {
    /**
     * 请求前处理
     * @param {object} config - 请求配置
     * @returns {object} 处理后的请求配置
     */
    beforeRequest(config) {
        const token = TokenService.getToken();
        if (token) {
            config.headers = {
                ...config.headers,
                'Authorization': `Bearer ${token}`
            };
        }
        return config;
    },

    /**
     * 响应处理
     * @param {object} response - 响应对象
     * @returns {object} 处理后的响应
     */
    handleResponse(response) {
        // Token 过期处理
        if (response.status === 401) {
            TokenService.clearToken();
            window.location.href = '/login';
        }
        return response;
    }
};

// 简化的权限控制
const AuthControl = {
    // 检查是否已登录
    checkLogin() {
        const token = localStorage.getItem('token');
        if (!token) {
            window.location.href = '/login.html';
            return false;
        }
        return true;
    },

    // 检查是否是管理员
    checkAdmin() {
        const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}');
        return userInfo.role === 'admin';
    },

    // 检查是否有权限访问某个功能
    checkPermission(permission) {
        const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}');
        return userInfo.permissions?.includes(permission) || false;
    },

    // 退出登录
    logout() {
        localStorage.removeItem('token');
        localStorage.removeItem('userInfo');
        window.location.href = '/login.html';
    }
};

// 在每个页面加载时检查登录状态
document.addEventListener('DOMContentLoaded', function() {
    if (!AuthControl.checkLogin()) return;

    // 根据用户角色显示/隐藏功能
    if (AuthControl.checkAdmin()) {
        // 显示管理员功能
        document.querySelectorAll('.admin-only').forEach(el => {
            el.style.display = 'block';
        });
    }

    // 绑定退出登录事件
    document.querySelector('.logout')?.addEventListener('click', function(e) {
        e.preventDefault();
        AuthControl.logout();
    });
}); 